// pages/booking/select-service/index.js
const apiService = require('../../../utils/api.js');
const auth = require('../../../utils/auth.js');
const app = getApp();

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		statusBarHeight: 44, // 系统状态栏高度
		selectedServices: [], // 已选择的服务ID数组
		totalCount: 0, // 选中的服务总数
		totalAmount: 0, // 选中的服务总金额
		totalAmountInteger: 0, // 总金额整数部分
		totalAmountDecimal: '00', // 总金额小数部分
		storeId: '', // 门店ID
		serviceList: [], // 服务列表
		isLoading: false, // 加载状态
		from: '' // 页面来源（如：pet-care-detail）
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad(options) {
		// 获取系统信息
		this.getSystemInfo();
		// 获取门店ID
		this.setData({
			storeId: options.storeId || ''
		});
		// 获取来源标记
		this.setData({
			from: options.from || ''
		});
		// 检查登录状态并加载数据
		this.checkLoginAndLoadData();
		// 初始化选择状态
		this.initializeSelection();
	},

	/**
	 * 获取系统信息
	 */
	getSystemInfo() {
		const systemInfo = wx.getSystemInfoSync();
		this.setData({
			statusBarHeight: systemInfo.statusBarHeight || 44
		});
	},

	/**
	 * 检查登录状态并加载数据
	 */
	async checkLoginAndLoadData() {
		if (!auth.checkLoginStatus()) {
			// 未登录，显示提示并跳转到登录页
			wx.showModal({
				title: '请先登录',
				content: '选择服务需要先登录账号',
				confirmText: '去登录',
				cancelText: '返回',
				success: (res) => {
					if (res.confirm) {
						auth.requireLogin(`/pages/booking/select-service/index?storeId=${this.data.storeId}`);
					} else {
						wx.navigateBack({
							delta: 1,
							fail: () => {
								wx.switchTab({
									url: '/pages/home/index/index'
								});
							}
						});
					}
				}
			});
			return;
		}
		
		// 已登录，加载服务列表
		await this.loadServiceList();
	},

	/**
	 * 加载服务列表
	 */
	async loadServiceList() {
		if (!this.data.storeId) {
			wx.showToast({
				title: '门店信息缺失',
				icon: 'none'
			});
			return;
		}

		this.setData({ isLoading: true });

		try {
			const storeManager = app.getStoreManager();
			const storeInfo = await storeManager.getStoreById(this.data.storeId);
			if (storeInfo) {
				const services = storeInfo.services || [];
				const serviceList = services.map(service => ({
					id: service._id,
					name: service.name,
					price: service.price / 100, // 转换为元
					originalPrice: service.price / 100,
					isPromotion: false,
					promotionTag: '',
					isSelected: false,
					description: service.description || '',
					duration: service.duration || 60
				}));
				
				this.setData({
					serviceList: serviceList,
					isLoading: false
				});
			} else {
				throw new Error(result.message);
			}
		} catch (error) {
			console.error('加载服务列表失败:', error);
			this.setData({ isLoading: false });
			wx.showToast({
				title: '加载失败',
				icon: 'none'
			});
		}
	},

	/**
	 * 初始化选择状态
	 */
	initializeSelection() {
		// 从上个页面传递过来的已选择服务（如果有的话）
		const pages = getCurrentPages();
		const prevPage = pages[pages.length - 2];
		if (prevPage && prevPage.data.selectedServices) {
			const selectedServices = prevPage.data.selectedServices;
			this.setData({
				selectedServices: selectedServices
			});
		}
		// 无论是否有预选择，都要更新一次状态
		this.updateTotalInfo();
	},

	/**
	 * 返回上一页
	 */
	onBack() {
		wx.navigateBack({
			delta: 1,
			success: () => {
				console.log('返回上一页成功');
			},
			fail: (error) => {
				console.error('返回上一页失败:', error);
				// 降级处理：跳转到首页
				wx.switchTab({
					url: '/pages/home/index/index'
				});
			}
		});
	},

	/**
	 * 选择/取消选择服务
	 */
	toggleService(e) {
		const serviceId = e.currentTarget.dataset.id;
		const { selectedServices } = this.data;
		
		let newSelectedServices = [...selectedServices];
		const index = newSelectedServices.indexOf(serviceId);
		
		if (index > -1) {
			// 已选择，取消选择
			newSelectedServices.splice(index, 1);
		} else {
			// 未选择，添加选择
			newSelectedServices.push(serviceId);
		}
		
		this.setData({
			selectedServices: newSelectedServices
		});
		
		// 更新合计信息
		this.updateTotalInfo();
	},

	/**
	 * 更新合计信息
	 */
	updateTotalInfo() {
		const { selectedServices, serviceList } = this.data;
		
		let totalCount = selectedServices.length;
		let totalAmount = 0;
		
		// 同时更新服务列表的选中状态
		const updatedServiceList = serviceList.map(service => ({
			...service,
			isSelected: selectedServices.indexOf(service.id) > -1
		}));
		
		selectedServices.forEach(serviceId => {
			const service = serviceList.find(item => item.id === serviceId);
			if (service) {
				totalAmount += service.price;
			}
		});
		
		// 计算整数部分和小数部分
		const integerPart = Math.floor(totalAmount);
		const decimalPart = ((totalAmount % 1) * 100).toFixed(0).padStart(2, '0');
		
		this.setData({
			serviceList: updatedServiceList,
			totalCount: totalCount,
			totalAmount: totalAmount,
			totalAmountInteger: integerPart,
			totalAmountDecimal: decimalPart
		});
	},

	/**
	 * 判断服务是否已选择
	 */
	isServiceSelected(serviceId) {
		return this.data.selectedServices.indexOf(serviceId) > -1;
	},

	/**
	 * 确定选择
	 */
	confirmSelection() {
		const { selectedServices, serviceList, totalCount, totalAmount, storeId, from } = this.data;
		
		if (totalCount === 0) {
			wx.showToast({
				title: '请选择至少一项服务',
				icon: 'none'
			});
			return;
		}
		
		// 构造选中的服务详情
		const selectedServiceDetails = selectedServices.map(serviceId => {
			return serviceList.find(item => item.id === serviceId);
		}).filter(Boolean);
		
		// 构造服务数据
		const serviceData = {
			selectedServices: selectedServices,
			selectedServiceDetails: selectedServiceDetails,
			totalCount: totalCount,
			totalAmount: totalAmount
		};
		
		// 将选中的服务保存到全局数据
		const app = getApp();
		app.globalData.selectedServices = serviceData;
		
		console.log('保存选中服务到全局数据:', serviceData);
		
		// 如果来源是宠物美容详情，则跳转到时间选择页面
		if (from === 'pet-care-detail') {
			try {
				const serviceDataStr = encodeURIComponent(JSON.stringify(serviceData));
				wx.navigateTo({
					url: `/pages/booking/select-time/index?from=pet-care-detail&storeId=${storeId}&serviceData=${serviceDataStr}`
				});
			} catch (err) {
				console.error('序列化服务数据失败:', err);
				wx.navigateTo({
					url: `/pages/booking/select-time/index?from=pet-care-detail&storeId=${storeId}`
				});
			}
			return;
		}
		
		// 否则返回上一页
		wx.navigateBack({
			delta: 1,
			success: () => {
				console.log('返回上一页成功，已保存服务选择');
			},
			fail: (error) => {
				console.error('返回上一页失败:', error);
			}
		});
	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady() {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	async onShow() {
		// 验证登录状态
		const isLoggedIn = await auth.validateLoginStatus();
		if (isLoggedIn) {
			// 刷新服务列表
			await this.loadServiceList();
		} else {
			// 登录状态失效，重新检查
			this.checkLoginAndLoadData();
		}
	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide() {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload() {

	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh() {
		wx.stopPullDownRefresh();
	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom() {

	},

	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage() {
		return {
			title: 'PowerPet - 选择预约项目',
			path: '/pages/booking/select-service/index'
		};
	}
})